package yu.ac.bg.etf.kdp.klijent;

import java.io.*;
import java.net.*;

import yu.ac.bg.etf.kdp.klase.FileTransfer;
import yu.ac.bg.etf.kdp.klase.Job;
import yu.ac.bg.etf.kdp.klase.MsgTxt;

public class ClientCheck extends Thread {

	String h;
	int p;
	Socket s;
	
	public ClientCheck (String host, int port) {
		try {
			s = new Socket(host,port);
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void run () {
		try {
			// kacimo se na server
			Socket clientSocket = new Socket(serverHost,serverPort);
			// inicijalizujemo tokove podataka
			OutputStream os = clientSocket.getOutputStream();
			InputStream is = clientSocket.getInputStream();
			ObjectOutputStream outo = new ObjectOutputStream(os);
			outo.flush();
			ObjectInputStream ino = new ObjectInputStream(is);
			BufferedOutputStream bos = new BufferedOutputStream(os);
			BufferedInputStream bis = new BufferedInputStream(is);
			// protokol komunikacije
			outo.writeObject(new MsgTxt("cliRequest"));
			outo.flush();
			outo.writeObject(new MsgTxt("newJob"));
			outo.flush();
			// saljemo vrstu posla koji treba da se odradi
			outo.writeObject(new MsgTxt(command));
			outo.flush();
			// saljemo ime datoteke u koju treba smestiti rezultate
			outo.writeObject(new MsgTxt(result));
			outo.flush();
			// saljemo matricu nad kojom se obavlja operacija a.txt
			System.out.println("Sending input matrix..");
			FileTransfer.sendFile(outo, inMatrix);
			System.out.println("Input matrix sent..");
			// saljemo vektor rezultata/promenljivih ako ga ima b.txt
			if (data != null) {
				outo.writeObject(new MsgTxt("sendingB"));
				outo.flush();
				System.out.println("Sending result/variable vector..");
				FileTransfer.sendFile(outo, data);
				System.out.println("Vector sent..");
			} else {
				outo.writeObject(new MsgTxt("notSendingB"));
				outo.flush();
			}
			// primamo identifikator posla koji smo zapoceli
			Job job = (Job)ino.readObject();
			jobId = job.getId();
			// zatvaramo tokove podataka
			outo.close();
			ino.close();
			clientSocket.close();
		} catch (UnknownHostException e2) {
			System.out.println("Unknown host..");
			return jobId;
		} catch (IOException e) {
			// TODO: handle exception
			System.out.println("Connection could not be established..");
			return jobId;
		} catch (ClassNotFoundException e1) {
			System.out.println("Class not found..");
			System.exit(1);
		}
	}
	
}
